package com.master.bd.calculo_frete;

import java.sql.*;

import com.master.ed.*;
import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;

public class Calcula_Frete_Redespacho extends Calcula_Frete{


    public Calcula_Frete_Redespacho(ExecutaSQL executasql) {
        super(executasql);
        // // ("Calcula_Frete_Redespacho 1");
    }

    public Calcula_FreteED calcula(Calcula_FreteED ed)
    throws Excecoes{

      try{

        ed.setLocalizado("N");
        ed.setDM_Tem_Cidade("S");
        ed.setDM_Tem_Peso("S");
        ed.setDM_Tem_Modal("N");
        ed.setDM_Tem_Validade("N");
        ed.setDM_Tem_Vigencia("N");
        ed.setDM_Tem_Empresa("N");
        ed.setDM_Tem_Regiao_Estado("S");
        ed.setDM_Tem_Estado("S");
        ed.setDM_Tem_Subregiao("S");
        ed.setDM_Tem_Regiao_Pais("N");
        ed.setDM_Tem_Pais("S");
        ed.setDM_Tabela_Reversa("N");
        ed.setDM_Tem_Tabela_Unidade("N");
        ed.setDM_Tem_Cidade("S");
        ed.setDM_Tem_Cidade("S");
        ed.setDM_Tem_Produto("N");

        ed.setDM_Percurso_Busca("Origem_Destino");

        double VL_Frete_Peso=0;
        double VL_AD_Valorem = 0;
        double VL_Ademe = 0;
        double VL_Pedagio = 0;
        double VL_Taxas = 0;
        double VL_Despacho = 0;

       // ed = Localiza_Tabela..escolheTabela(ed);
 
       Tabela_FreteBean tabelaFreteED = new Tabela_FreteBean();
       Localiza_Tabela = new Localiza_Tabela(this.executasql);

       tabelaFreteED = Localiza_Tabela.buscaTabela(ed);

       // // ("Calcula_Frete_Redespacho getPE_Frete_Entrega->>" +tabelaFreteED.getPE_Frete_Entrega());


               if (tabelaFreteED.getDM_Localizado().equals("N") ){
                  sql =  " SELECT oid_Pessoa from Unidades ";
                  sql += " WHERE Unidades.oid_unidade =" + ed.getOID_Unidade();

                  rs = null;
                  rs = this.executasql.executarConsulta(sql);

                  while (rs.next()){
                      //tabelaFreteED = Localiza_Tabela.buscaTabela(ed);
                  }
              }


              if (tabelaFreteED.getDM_Localizado().equals("S") ){

                          // // ("Calcula_Frete_Redespacho FP getVL_Total_Frete=" + ed.getVL_Total_Frete ());
                          // // ("Calcula_Frete_Redespacho FP getPE_Frete_Entrega->>>>" + tabelaFreteED.getPE_Frete_Entrega ());

                          // --------------------FRETE % SOBRE O CTO ORIGINAL   -----------------------------------
                          VL_Frete_Peso = ed.getVL_Total_Frete () * tabelaFreteED.getPE_Frete_Entrega () / 100;


	                  // --------------------FRETE PESO--------------------------------------------------
                          if (VL_Frete_Peso<=0) {
                            VL_Frete_Peso = tabelaFreteED.getVL_Frete();
                            if (tabelaFreteED.getDM_Tipo_Peso().equals("K")){
                                VL_Frete_Peso = (tabelaFreteED.getVL_Frete() * (ed.getNR_Peso_Tabela()-tabelaFreteED.getNR_Peso_Minimo()));
                            }
                            if(tabelaFreteED.getDM_Tipo_Peso().equals("T")){
                                VL_Frete_Peso = (tabelaFreteED.getVL_Frete() * (ed.getNR_Peso_Tabela()-tabelaFreteED.getNR_Peso_Minimo()) / 1000);
                            }
                            if(tabelaFreteED.getDM_Tipo_Peso().equals("C")){
                                VL_Frete_Peso = (tabelaFreteED.getVL_Frete() * ed.getNR_Peso_Tabela());
                            }

                            if (tabelaFreteED.getDM_Tipo_Peso().equals("E")){
                                VL_Frete_Peso = (tabelaFreteED.getVL_Frete() * (ed.getNR_Peso_Tabela()-(tabelaFreteED.getNR_Peso_Inicial()-1)));
                            }

                            if (tabelaFreteED.getVL_Minimo_Nota_Fiscal() >= ed.getVL_Nota_Fiscal()) {
                                VL_Frete_Peso += tabelaFreteED.getVL_Outros2();
                            }

                            if (ed.getDM_Tipo_Conhecimento().equals("3") && tabelaFreteED.getPE_Devolucao()>0) {
                                VL_Frete_Peso=VL_Frete_Peso * ((100-tabelaFreteED.getPE_Devolucao()) / 100);
                            }

                            if (ed.getDM_Tipo_Conhecimento().equals("R") && tabelaFreteED.getPE_Refaturamento()>0) {
                                VL_Frete_Peso=VL_Frete_Peso * ((100-tabelaFreteED.getPE_Refaturamento()) / 100);
                            }

                            if (ed.getDM_Tipo_Conhecimento().equals("4") && tabelaFreteED.getPE_Reentrega()>0) {
                                VL_Frete_Peso=VL_Frete_Peso * ((100-tabelaFreteED.getPE_Reentrega()) / 100);
                            }

                            if (ed.getNR_Cubagem_Total() >0 && ed.getNR_Cubagem_Total()> ed.getNR_Cubagem()) {
                                VL_Frete_Peso=((VL_Frete_Peso/ed.getNR_Cubagem_Total()) * ed.getNR_Cubagem());
                            }
                          }

                          if (VL_Frete_Peso < tabelaFreteED.getVL_Frete_Minimo()){
                              VL_Frete_Peso = tabelaFreteED.getVL_Frete_Minimo();
                          }

                          // // ("Calcula_Frete_Redespacho VL_Frete_Peso->>>>" + VL_Frete_Peso);


	                  // --------------------AD VALOREM--------------------------------------------------
	                  if (ed.getVL_Minimo_Nota_Fiscal() < ed.getVL_Nota_Fiscal()) {
	                      VL_AD_Valorem = (ed.getVL_Nota_Fiscal() * tabelaFreteED.getPE_Ad_Valorem() / 100);

	                      if (VL_AD_Valorem < tabelaFreteED.getVL_Ad_Valorem_Minimo()){
	                          VL_AD_Valorem = tabelaFreteED.getVL_Ad_Valorem_Minimo();
	                      }
	                      if (ed.getDM_Tipo_Conhecimento().equals("3") && tabelaFreteED.getPE_Devolucao()>0) {
	                          VL_AD_Valorem=VL_AD_Valorem * ((100-tabelaFreteED.getPE_Devolucao()) / 100);
	                      }
	                      if (ed.getDM_Tipo_Conhecimento().equals("R") && tabelaFreteED.getPE_Refaturamento()>0) {
	                          VL_AD_Valorem=VL_AD_Valorem * ((100-tabelaFreteED.getPE_Refaturamento()) / 100);
	                      }

	                      if (ed.getDM_Tipo_Conhecimento().equals("4") && tabelaFreteED.getPE_Reentrega()>0) {
	                          VL_AD_Valorem=VL_AD_Valorem * ((100-tabelaFreteED.getPE_Reentrega()) / 100);
	                      }
	                  }
                          // // ("Calcula_Frete_Redespacho VL_AD_Valorem->>>>" + VL_AD_Valorem);


	                  // --------------------ADEME/GRIS--------------------------------------------------
	                  VL_Ademe = (ed.getVL_Nota_Fiscal() * tabelaFreteED.getPE_Ademe() / 100);
	                  if (VL_Ademe < tabelaFreteED.getVL_Ademe_Minimo()){
	                      VL_Ademe = tabelaFreteED.getVL_Ademe_Minimo();
	                  }
	                  if (ed.getDM_Tipo_Conhecimento().equals("3") && tabelaFreteED.getPE_Devolucao()>0) {
	                      VL_Ademe=VL_Ademe * ((100-tabelaFreteED.getPE_Devolucao()) / 100);
	                  }
	                  if (ed.getDM_Tipo_Conhecimento().equals("R") && tabelaFreteED.getPE_Refaturamento()>0) {
	                      VL_Ademe=VL_Ademe * ((100-tabelaFreteED.getPE_Refaturamento()) / 100);
	                  }
	                  if (ed.getDM_Tipo_Conhecimento().equals("4") && tabelaFreteED.getPE_Reentrega()>0) {
	                      VL_Ademe=VL_Ademe * ((100-tabelaFreteED.getPE_Reentrega()) / 100);
	                  }
                          // // ("Calcula_Frete_Redespacho VL_Ademe->>>>" + VL_Ademe);


	                  // --------------------TAXAS-------------------------------------------------------

	                  VL_Taxas = tabelaFreteED.getVL_Taxas();
	                  if (ed.getDM_Tipo_Conhecimento().equals("3") && tabelaFreteED.getPE_Devolucao()>0) {
	                      VL_Taxas=VL_Taxas * ((100-tabelaFreteED.getPE_Devolucao()) / 100);
	                  }
	                  if (ed.getDM_Tipo_Conhecimento().equals("R") && tabelaFreteED.getPE_Refaturamento()>0) {
	                      VL_Taxas=VL_Taxas * ((100-tabelaFreteED.getPE_Refaturamento()) / 100);
	                  }
	                  if (ed.getDM_Tipo_Conhecimento().equals("4") && tabelaFreteED.getPE_Reentrega()>0) {
	                      VL_Taxas=VL_Taxas * ((100-tabelaFreteED.getPE_Reentrega()) / 100);
	                  }
                          // // ("Calcula_Frete_Redespacho VL_Taxas->>>>" + VL_Taxas);


	                  // --------------------DESPACHO----------------------------------------------------

	                  VL_Despacho = tabelaFreteED.getVL_Despacho();
	                  if (ed.getDM_Tipo_Conhecimento().equals("3") && tabelaFreteED.getPE_Devolucao()>0) {
	                      VL_Despacho=VL_Despacho * ((100-tabelaFreteED.getPE_Devolucao()) / 100);
	                  }
	                  if (ed.getDM_Tipo_Conhecimento().equals("R") && tabelaFreteED.getPE_Refaturamento()>0) {
	                      VL_Despacho=VL_Despacho * ((100-tabelaFreteED.getPE_Refaturamento()) / 100);
	                  }
	                  if (ed.getDM_Tipo_Conhecimento().equals("4") && tabelaFreteED.getPE_Reentrega()>0) {
	                      VL_Despacho=VL_Despacho * ((100-tabelaFreteED.getPE_Reentrega()) / 100);
	                  }
                          // // ("Calcula_Frete_Redespacho VL_Despacho->>>>" + VL_Despacho);

	                  // --------------------PEDAGIO-----------------------------------------------------

	                  VL_Pedagio = tabelaFreteED.getVL_Pedagio();
	                  if (tabelaFreteED.getDM_Tipo_Pedagio().equals("K")) {
	                      VL_Pedagio = (tabelaFreteED.getVL_Pedagio() * ed.getNR_Peso_Cubado());
	                  }
	                  if (tabelaFreteED.getDM_Tipo_Pedagio().equals("F")) {
                              double pc=0;
                              VL_Pedagio=0;
                              while (pc<ed.getNR_Peso_Cubado()) {
                                VL_Pedagio += (tabelaFreteED.getVL_Pedagio() );
                                pc+=100;
                              }
	                  }

	                  if (ed.getDM_Tipo_Conhecimento().equals("3") && tabelaFreteED.getPE_Devolucao()>0) {
	                      VL_Pedagio=VL_Pedagio * ((100-tabelaFreteED.getPE_Devolucao()) / 100);
	                  }
	                  if (ed.getDM_Tipo_Conhecimento().equals("R") && tabelaFreteED.getPE_Refaturamento()>0) {
	                      VL_Pedagio=VL_Pedagio * ((100-tabelaFreteED.getPE_Refaturamento()) / 100);
	                  }
	                  if (ed.getDM_Tipo_Conhecimento().equals("4") && tabelaFreteED.getPE_Reentrega()>0) {
	                      VL_Pedagio=VL_Pedagio * ((100-tabelaFreteED.getPE_Reentrega()) / 100);
	                  }
                          // // ("Calcula_Frete_Redespacho VL_Pedagio->>>>" + VL_Pedagio);



                  ed.setVL_Total_Redespacho(VL_Pedagio+VL_Despacho+VL_Taxas+VL_Ademe+VL_AD_Valorem+VL_Frete_Peso);

                  // // ("Calcula_Frete_Redespacho VL_Total_Redespacho" + ed.getVL_Total_Redespacho());

                  ed.setCD_Tipo_Movimento("RED");
                  ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
                  ed.setVL_Movimento(ed.getVL_Total_Redespacho());

                  // //  (" getOID_Tabela_Frete->> " + ed.getOID_Tabela_Frete());
                  
                  // this.incluiMovimento(ed);


              }

      } catch(Excecoes e) {
          if (DM_Tipo_Erro != null && DM_Tipo_Erro.equals("9999")){
              throw new Mensagens("Erro ao ...");
          } else throw e;
      } catch(SQLException e){
          throw new Excecoes(e.getMessage(), e, getClass().getName(), "calcula_frete_Tabela_LevaETraz(Calcula_FreteED ed)");
      }
      return ed;
  }

}
